/* 
自定义Promise
*/
((window) => {

  /**
   * 构造函数
   * @param  excutor 执行器函数
   */
  function Promise(excutor) {
    
  }

  /**
   * 指定成功和失败的回调, 并返回一个新的promise
   * @param {*} onResolved 成功的回调 => 用于得到成功的value
   * @param {*} onRejected 失败的回调 => 用于得到失败的reason
   */
  Promise.prototype.then = function (onResolved, onRejected) {
    
  }

  /**
   * 指定失败的回调, 并返回一个新的promise
   * @param {*} onRejected 失败的回调 => 用于得到失败的reason
   */
  Promise.prototype.catch = function (onRejected) {
    
  }

  /**
   * 无论当前promise是成功/失败都会执行onFinal, 并返回一个新的promise
   * @param {*} onFinal
   */
   Promise.prototype.finally = function (onFinal) {
    
  }

  /**
   *  返回一个成功的promise, value为指定的value
   * @param {*} value 
   */
  Promise.resolve = function (value) {
    
  }

  /**
   *  返回一个失败的promise, reason为指定的reason
   * @param {*} reason
   */
  Promise.reject = function (reason) {
    
  }

  /**
   * 返回一个promise, 如果promises都成功, 它才成功, 成功的value为所有value组成的数组, 只要有一个失败, 那它就失败了
   * @param {*} promises 
   */
  Promise.all = function (promises) {
    
  }

  /**
   * 返回一个promise, 由第一个完成的promie来决定它的结果
   * @param {*} promises 
   */
  Promise.race = function (promises) {
    
  }

  /**
   * 返回一个promise, 当所有promise都完成时它就成功, value值为所有promise的value或reason组成的数组
   * @param {*} promises 
   */
  Promise.allSettled = function (promises) {
    
  }

  window.Promise = Promise
})(window)